/**
 * 该控制器类处理与聊天室相关的请求和操作。
 */
package com.jsp.lostfound.controller;

import java.io.PrintWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jsp.lostfound.entity.User;
import com.jsp.lostfound.service.UserService;
import com.jsp.lostfound.websocket.ChatWebSocketHandler;

@Controller
public class ChattingroomController {

	@Autowired
	private ChatWebSocketHandler chatWebSocketHandler; // 注入WebSocket处理器bean，用于处理聊天室相关操作
	@Autowired
	private UserService userService; // 注入用户服务bean，用于处理用户相关操作

	/**
	 * 处理移除用户的请求，将指定ID的用户从聊天室中移出并列入黑名单。
	 * @param id 需要移除的用户的ID
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 * @throws Exception 抛出异常
	 */
	@RequestMapping("/removeChatUser")
	public void removeChatUser(Integer id, PrintWriter out) throws Exception {
		User user = new User(id, -1);
		userService.editUser(user);
		chatWebSocketHandler.removeChatUser(userService.showUserDetail(id));
		out.write("已将用户移出群聊，并列入黑名单");
	}

	/**
	 * 处理加载用户信息的请求，返回指定ID的用户详细信息。
	 * @param id 需要加载信息的用户的ID
	 * @return 返回指定ID的用户详细信息
	 */
	@RequestMapping("/loadUserInfo")
	@ResponseBody
	public User loadUserRole(Integer id) {
		return userService.showUserDetail(id);
	}

	/**
	 * 处理设置用户为群聊管理员的请求，将指定ID的用户设置为群聊管理员。
	 * @param id 需要设置为管理员的用户的ID
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/setChatAdmin")
	public void setChatAdmin(Integer id, PrintWriter out) {
		User user = new User(id, 1);
		userService.editUser(user);
		chatWebSocketHandler.setChatAdmin(userService.showUserDetail(id));
		out.write("已将该用户设置为群聊管理员");
	}

	/**
	 * 处理取消用户群聊管理员权限的请求，将指定ID的用户取消群聊管理员权限。
	 * @param id 需要取消管理员权限的用户的ID
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/cancelChatAdmin")
	public void cancelChatAdmin(Integer id, PrintWriter out) {
		User user = new User(id, 0);
		userService.editUser(user);
		chatWebSocketHandler.cancelChatAdmin(userService.showUserDetail(id));
		out.write("已取消该用户群聊管理员权限");
	}

	/**
	 * 处理禁言用户的请求，将指定ID的用户禁言。
	 * @param user 需要禁言的用户
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/forbidChat")
	public void forbidChat(User user, PrintWriter out) {
		userService.editUser(user);
		chatWebSocketHandler.forbidChat(user);
		out.write("已将该用户禁言");
	}

	/**
	 * 处理解除用户禁言的请求，将指定ID的用户解除禁言。
	 * @param user 需要解除禁言的用户
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/removeForbidChat")
	public void removeForbidChat(User user, PrintWriter out) {
		userService.editUser(user);
		chatWebSocketHandler.removeForbidChat(user);
		out.write("该用户已被解除禁言");
	}

	/**
	 * 处理自动解除用户禁言的请求，将指定ID的用户禁言时间到期后自动解除禁言。
	 * @param user 需要自动解除禁言的用户
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/autoRemoveForbidChat")
	public void autoRemoveForbidChat(User user, PrintWriter out) {
		userService.editUser(user);
		chatWebSocketHandler.autoRemoveForbidChat(user);
		out.write("您的禁言时间已到期，可正常聊天");
	}

}